/**
 * 色彩空间
 */
#ifndef _COLOR_SPACE_H_
#define _COLOR_SPACE_H_

#include "stdc.h"

#ifdef __cplusplus
extern "C" {
#endif


/**
附表（HSL/V/B在各种环境下的取值范围）：
+------------------+-------+-----------+-----------+-------------+   
| Applications     | Space | H Range   | S Range   | L/V/B Range | 
+------------------+-------+-----------+-----------+-------------+   
| Paint Shop Pro   | HSL   | 0 - 255   | 0 - 255   | L 0 - 255   | 
| Gimp             | HSV   | 0 - 360°  | 0 - 100   | V 0 - 100   | 
| Photoshop        | HSV   | 0 - 360°  | 0 - 100%  | B 0 - 100%  | 
| Windows          | HSL   | 0 - 240   | 0 - 240   | L 0 - 240   | 
| Linux / KDE      | HSV   | 0 - 360°  | 0 - 255   | V 0 - 255   | 
| GTK              | HSV   | 0 - 360°  | 0 - 1.0   | V 0 - 1.0   | 
| Java (awt.Color) | HSV   | 0 - 1.0   | 0 - 1.0   | B 0 - 1.0   | 
| Apple            | HSV   | 0 - 360°  | 0 - 100%  | L 0 - 100%  | 
+------------------+-------+-----------+-----------+-------------+   
*/

/**
 * @brief HSL 颜色转换为 RGB 颜色
 * @param H 色相 0~360˚
 * @param S 饱和度 0~100˚
 * @param L 亮度: 0.0 ~ 1.0 (0 ~ 100%)
 * @param R [out] 红色值 0 ~ 255
 * @param G [out] 绿色值 0 ~ 255
 * @param B [out] 蓝色值 0 ~ 255
 */
void HSL2RGB(double H, double S, double L, uint8_t *R, uint8_t *G, uint8_t *B);

/**
 * @brief RGB 颜色转换为 HSL 颜色
 * @param R 红色值 0 ~ 255
 * @param G 绿色值 0 ~ 255
 * @param B 蓝色值 0 ~ 255
 * @param H [out] 色相 0~360˚
 * @param S [out] 饱和度 0~100˚
 * @param L [out] 亮度 0 ~ 100%
 */
void RGB2HSL(uint8_t R, uint8_t G, uint8_t B, double *H, double *S, double *L);

/**
 * @brief 色温 转换为 RGB 颜色
 * @param T 色温(单位开尔文，取值范围 1000 ~ 40000)
 * @param R 红色值 0 ~ 255
 * @param G 绿色值 0 ~ 255
 * @param B 蓝色值 0 ~ 255
 */
void T2RGB(uint16_t T, uint8_t *R, uint8_t *G, uint8_t *B);

/**
 * @brief RGB 颜色转换为 色温
 * @param R 红色值 0 ~ 255
 * @param G 绿色值 0 ~ 255
 * @param B 蓝色值 0 ~ 255
 * @param T 色温(单位开尔文，取值范围 1000 ~ 40000)
 */
void RGB2T(uint8_t R, uint8_t G, uint8_t B, uint16_t *T);


#ifdef __cplusplus
}
#endif

#endif // _COLOR_SPACE_H_
